package com.baizhi.config;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.context.annotation.Configuration;

/**
 * @Configuration 标记当前类为配置类, 在该类中就相当于工厂的环境
 * @Aspect 标记当前类为切面 会自动对类中定义好的切点和增强做编织处理
 *
 */
@Configuration
@Aspect
public class AopConfig {

    /**
     * 1 定义切点 @Pointcut()
     */
    @Pointcut("execution(* com.baizhi.service.*.*(..))")
    public void testPointCut(){

    }
    /**
     *
     * 2 写一个增强
     * @
     *
     */
    @Before("testPointCut()")
    public void testBefore(){

        System.out.println("前置增强");
    }

    @After("testPointCut()")
    public void testAfter(){
        System.out.println("后置增强");
    }

    @Around("testPointCut()")
    public Object testAround(ProceedingJoinPoint pjp) throws Throwable {

        System.out.println("环绕前");
        //放行
        Object proceed = pjp.proceed();

        System.out.println("环绕后");
        return proceed ;
    }

}
